package ar.com.caeycae.view;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.apache.log4j.Logger;

import ar.com.caeycae.data.Concepto;
import ar.com.caeycae.data.Movimiento;
import ar.com.caeycae.service.ConceptoService;
import ar.com.caeycae.service.MovimientoService;

@ManagedBean(name="movimientoView")
@ViewScoped
public class MovimientoView implements Serializable{

	private static final long serialVersionUID = 1L;
	private static final Logger LOGGER = Logger.getLogger(MovimientoView.class);
	
	private static final String LISTAR = "LISTAR";
	private static final String CREAR = "CREAR";
	private static final String EDITAR = "EDITAR";
	
	@ManagedProperty("#{movimientoService}")
	private MovimientoService movimientoService;
	
	@ManagedProperty("#{conceptoService}")
	private ConceptoService conceptoService;

	private List<Movimiento> movimientos;
		
	private Movimiento movimiento;
	
	private String modo;
	
	@PostConstruct
	public void init() {
		this.modo = LISTAR;
		this.movimiento = new Movimiento();
		this.movimientos = movimientoService.listar();
	}
	
	public MovimientoService getMovimientoService() {
		return movimientoService;
	}

	public void setMovimientoService(MovimientoService movimientoService) {
		this.movimientoService = movimientoService;
	}

	public ConceptoService getConceptoService() {
		return conceptoService;
	}

	public void setConceptoService(ConceptoService conceptoService) {
		this.conceptoService = conceptoService;
	}

	public String getModo() {
		return modo;
	}

	public void setModo(String modo) {
		this.modo = modo;
		if(LISTAR.equalsIgnoreCase(modo))
			this.movimientos = movimientoService.listar();
	}

	public Movimiento getMovimiento() {
		return movimiento;
	}

	public void setMovimiento(Movimiento movimiento) {
		this.movimiento = movimiento;
	}
	
	public List<Movimiento> getMovimientos() {
		return movimientos;
	}
	
	public void setMovimientos(List<Movimiento> movimientos) {
		this.movimientos = movimientos;
	}
	
	public void crear(){
		this.movimiento = new Movimiento();
		setModo(CREAR);
	}
	
	public void agregar() {
		LOGGER.debug("Agregando movimiento");
		movimiento = movimientoService.agregar(movimiento);
		FacesContext.getCurrentInstance().addMessage(null, 
				new FacesMessage("El movimiento "+this.movimiento+" fue agregado."));
		movimiento = new Movimiento();
		setModo(LISTAR);
	}
	
	public void editar(Movimiento movimiento){
		this.movimiento = movimiento;
		setModo(EDITAR);
	}
	
	public void actualizar() {
		movimientoService.actualizar(movimiento);
		setModo(LISTAR);
	}

	public void cancelar() {
		movimiento = new Movimiento();
		setModo(LISTAR);
	}
	
	public void borrar(Movimiento movimiento) {
		movimientoService.borrar(movimiento);
		setModo(LISTAR);
	}
	
	public List<Concepto> getConceptos(){
		return conceptoService.listar();
	}
		
}
